home *** CD-ROM | disk | FTP | other *** search
- /* drawing.m */
- #include "idbsp.h"
-
- /* id window_i, view_i; */
- STORAGE *window_i,
- *view_i;
- float scale = 0.125;
- NXRect worldbounds;
-
- /*
- ================
- =
- = IDRectFromPoints
- =
- = Makes the rectangle just touch the two points
- =
- ================
- */
-
- void IDRectFromPoints(NXRect * rect, NXPoint const *p1, NXPoint const *p2)
- {
- /* return a rectangle that encloses the two points */
- if (p1 -> x < p2 -> x)
- {
- rect -> origin.x = p1 -> x;
- rect -> size.width = p2 -> x - p1 -> x + 1;
- }
- else
- {
- rect -> origin.x = p2 -> x;
- rect -> size.width = p1 -> x - p2 -> x + 1;
- }
-
- if (p1 -> y < p2 -> y)
- {
- rect -> origin.y = p1 -> y;
- rect -> size.height = p2 -> y - p1 -> y + 1;
- }
- else
- {
- rect -> origin.y = p2 -> y;
- rect -> size.height = p1 -> y - p2 -> y + 1;
- }
- }
-
-
- /*
- ==================
- =
- = IDEnclosePoint
- =
- = Make the rect enclose the point if it doesn't allready
- =
- ==================
- */
-
- void IDEnclosePoint(NXRect * rect, NXPoint const *point)
- {
- float right,
- top;
-
- right = rect -> origin.x + rect -> size.width - 1;
- top = rect -> origin.y + rect -> size.height - 1;
-
- if (point -> x < rect -> origin.x)
- rect -> origin.x = point -> x;
- if (point -> y < rect -> origin.y)
- rect -> origin.y = point -> y;
- if (point -> x > right)
- right = point -> x;
- if (point -> y > top)
- top = point -> y;
-
- rect -> size.width = right - rect -> origin.x + 1;
- rect -> size.height = top - rect -> origin.y + 1;
- }
-
-
- /*
- ===========
- =
- = BoundLineStore
- =
- ===========
- */
-
- /* void BoundLineStore (id lines_i, NXRect *r) */
- void BoundLineStore(STORAGE * lines_i, NXRect * r)
- {
- int i,
- c;
- worldline_t *line_p;
-
- /* c = [lines_i count]; */
- c = lines_i -> count;
- if (!c)
- Error("BoundLineStore: empty list");
-
- /* line_p = [lines_i elementAt:0]; */
- line_p = lines_i -> data;
- IDRectFromPoints(r, &line_p -> p1, &line_p -> p2);
-
- for (i = 1; i < c; i++)
- {
- /* line_p = [lines_i elementAt:i]; */
- line_p = (worldline_t *) lines_i -> data + i;
- IDEnclosePoint(r, &line_p -> p1);
- IDEnclosePoint(r, &line_p -> p2);
- }
- }
-
-
- /*
- ===========
- =
- = DrawLineStore
- =
- = Draws all of the lines in the given storage object
- =
- ===========
- */
-
- /* void DrawLineStore (id lines_i) */
- void DrawLineStore(STORAGE * lines_i)
- {
-
- #if 0
- int i,
- c;
- worldline_t *line_p;
-
- if (!draw)
- return;
-
- /* c = [lines_i count]; */
- c = lines_i -> count;
-
- for (i = 0; i < c; i++)
- {
- /* line_p = [lines_i elementAt:i]; */
- line_p = (worldline_t *) lines_i -> data + i;
- PSmoveto(line_p -> p1.x, line_p -> p1.y);
- PSlineto(line_p -> p2.x, line_p -> p2.y);
- PSstroke();
- }
- NXPing();
- #endif
- }
-
- /*
- ===========
- =
- = DrawLine
- =
- = Draws all of the lines in the given storage object
- =
- ===========
- */
-
- void DrawLineDef(maplinedef_t * ld)
- {
-
- #if 0
- mapvertex_t *v1,
- *v2;
-
- if (!draw)
- return;
- /*
- v1 = [mapvertexstore_i elementAt: ld->v1];
- v2 = [mapvertexstore_i elementAt: ld->v2];
- */
- v1 = mapvertexstore_i -> data + ld -> v1;
- v2 = mapvertexstore_i -> data + ld -> v2;
- PSmoveto(v1 -> x, v1 -> y);
- PSlineto(v2 -> x, v2 -> y);
- PSstroke();
- NXPing();
- #endif
- }
-
-
- /*
- ===========
- =
- = DrawMap
- =
- ===========
- */
-
- void DrawMap(void)
- {
- NXRect scaled;
-
- BoundLineStore(linestore_i, &worldbounds);
- worldbounds.origin.x -= 8;
- worldbounds.origin.y -= 8;
- worldbounds.size.width += 16;
- worldbounds.size.height += 16;
-
- #if 0
- if (!draw)
- return;
-
- scaled.origin.x = 300;
- scaled.origin.y = 80;
- scaled.size.width = worldbounds.size.width * scale;
- scaled.size.height = worldbounds.size.height * scale;
- /*
- window_i =
- [[Window alloc]
- initContent: &scaled
- style: NX_TITLEDSTYLE
- backing: NX_RETAINED
- buttonMask: 0
- defer: NO
- ];
-
- [window_i display];
- [window_i orderFront: nil];
- view_i = [window_i contentView];
-
- [view_i
- setDrawSize: worldbounds.size.width
- : worldbounds.size.height];
- [view_i
- setDrawOrigin: worldbounds.origin.x
- : worldbounds.origin.y];
-
- [view_i lockFocus];
- PSsetgray (NX_BLACK);
- DrawLineStore (linestore_i);
- */
- #endif
- }
-
-
- /*
- ===========
- =
- = EraseWindow
- =
- ===========
- */
-
- void EraseWindow(void)
- {
-
- #if 0
- if (!draw)
- return;
-
- NXEraseRect(&worldbounds);
- NXPing();
- #endif
- }
-
-
- /*
- ============================
- =
- = DrawDivLine
- =
- ============================
- */
-
- void DrawDivLine(divline_t * div)
- {
-
- #if 0
- float vx,
- vy,
- dist;
-
- if (!draw)
- return;
-
- PSsetgray(NX_BLACK);
-
- dist = sqrt(pow(div -> dx, 2) + pow(div -> dy, 2));
- vx = div -> dx / dist;
- vy = div -> dy / dist;
-
- dist = MAX(worldbounds.size.width, worldbounds.size.height);
-
- PSmoveto(div -> pt.x - vx * dist, div -> pt.y - vy * dist);
- PSlineto(div -> pt.x + vx * dist, div -> pt.y + vy * dist);
- PSstroke();
- NXPing();
- #endif
- }
-